package com.dsg.kf.common.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

import com.dsg.kf.common.cache.RedisUtils;

public class ImageCodeUtils {

	/**
	 * 根据手机号码和滑块uuid来生成图片验证码
	 * @param huakuuid
	 * @param mobile
	 * @return
	 */
	public static BufferedImage getImageCode(RedisUtils redisUtils,String huakuuid, String mobile){
		Object cacheHuakUUid=redisUtils.get(huakuuid);
		if(cacheHuakUUid==null){
			return null;
		}
		int width = 63;
		int height = 37;
		Random random = new Random();
		// 生成缓冲区image类
		BufferedImage image = new BufferedImage(width, height, 1);
		// 产生image类的Graphics用于绘制操作
		Graphics g = image.getGraphics();
		// Graphics类的样式
		g.setColor(getRandColor(200, 250));
		g.setFont(new Font("Times New Roman", 0, 28));
		g.fillRect(0, 0, width, height);
		// 绘制干扰线
		for (int i = 0; i < 40; i++) {
			g.setColor(getRandColor(130, 200));
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int x1 = random.nextInt(12);
			int y1 = random.nextInt(12);
			g.drawLine(x, y, x + x1, y + y1);
		}

		// 绘制字符
		StringBuilder strCode = new StringBuilder();
		for (int i = 0; i < 4; i++) {
			String rand = String.valueOf(random.nextInt(10));
			strCode.append(rand);
			g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
			g.drawString(rand, 13 * i + 6, 28);
		}
		// 将字符保存到session中用于前端的验证
		g.dispose();
		String codeKey = huakuuid.concat(mobile);
		redisUtils.put(codeKey, strCode.toString(), 300);
		return image;
	}
	
	
	/**
	 * 根据手机号码和滑块uuid来生成图片验证码
	 * @param huakuuid
	 * @param mobile
	 * @return
	 */
	public static BufferedImage getImageCodeOnly(RedisUtils redisUtils,String key){
		int width = 63;
		int height = 37;
		Random random = new Random();
		// 生成缓冲区image类
		BufferedImage image = new BufferedImage(width, height, 1);
		// 产生image类的Graphics用于绘制操作
		Graphics g = image.getGraphics();
		// Graphics类的样式
		g.setColor(getRandColor(200, 250));
		g.setFont(new Font("Times New Roman", 0, 28));
		g.fillRect(0, 0, width, height);
		// 绘制干扰线
		for (int i = 0; i < 40; i++) {
			g.setColor(getRandColor(130, 200));
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int x1 = random.nextInt(12);
			int y1 = random.nextInt(12);
			g.drawLine(x, y, x + x1, y + y1);
		}

		// 绘制字符
		StringBuilder strCode = new StringBuilder();
		for (int i = 0; i < 4; i++) {
			String rand = String.valueOf(random.nextInt(10));
			strCode.append(rand);
			g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
			g.drawString(rand, 13 * i + 6, 28);
		}
		// 将字符保存到session中用于前端的验证
		g.dispose();
		redisUtils.put(key, strCode.toString(), 300);
		return image;
	}
	
	
	private static Color getRandColor(int fc,int bc){
        Random random = new Random();
        if(fc>255)
            fc = 255;
        if(bc>255)
            bc = 255;
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r,g,b);
    }
}
